package com.baishancloud.log.common.util

import cn.hutool.core.exceptions.ExceptionUtil
import com.baishancloud.log.format.scala.{Origin, SanmaOrigin, SpiderOrigin}
import org.slf4j.{Logger, LoggerFactory}

/**
 * 对logFormat包的一些功能增强
 *
 * @author ziqiang.wang 
 * @date 2022/3/15 19:07
 */
object LogFormatUtil extends Serializable {

  val logger: Logger = LoggerFactory.getLogger(LogFormatUtil.getClass)

  /**
   * 对scala版本的logFormat中的Origin转化异常进行捕捉处理
   *
   * @param value 日志行数据
   * @return 如果发生异常，则返回null
   */
  def originParse(value: String): Origin = {
    var result: Origin = null
    try {
      result = Origin.parse(value).orNull
    } catch {
      case e: Exception => logger.error(s"origin转化异常，原始日志数据：\n${value}\n，具体异常：\n${ExceptionUtil.stacktraceToString(e, 500)}")
    }
    result
  }

  /**
   * 对scala版本的logFormat中的SanmaOrigin转化异常进行捕捉处理
   *
   * @param value 日志行数据
   * @return 如果发生异常，则返回null
   */
  def sanmaOriginParse(value: String): SanmaOrigin = {
    var result: SanmaOrigin = null
    try {
      result = SanmaOrigin.parse(value).orNull
    } catch {
      case e: Exception => logger.error(s"sanmaOrigin转化异常，原始日志数据：\n${value}\n，具体异常：\n${ExceptionUtil.stacktraceToString(e, 500)}")
    }
    result
  }

  /**
   * 对scala版本的logFormat中的SpiderOrigin转化异常进行捕捉处理
   *
   * @param value 日志行数据
   * @return 如果发生异常，则返回null
   */
  def spiderOriginParse(value: String): SpiderOrigin = {
    var result: SpiderOrigin = null
    try {
      result = SpiderOrigin.parse(value).orNull
    } catch {
      case e: Exception => logger.error(s"origin转化异常，原始日志数据：\n${value}\n，具体异常：\n${ExceptionUtil.stacktraceToString(e, 500)}")
    }
    result
  }

}
